package com.zan.zanchat.common.user.domain.entity;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.Objects;
import java.util.Optional;

/**
 * @Author Zan
 * @Create 2024/3/17 20:01
 * @Description :
 */
@Data
public class IpInfo implements Serializable {

    // 注册时的ip
    private String createIp;

    // 注册时的ip详情
    private IpDetail createIpDetail;

    // 最新登录的ip
    private String updateIp;

    // 最新登录的ip详情
    private IpDetail updateIpDetail;

    public void refreshIp(String ip) {
        if (StringUtils.isBlank(ip)) {
            return;
        }
        if (StringUtils.isBlank(createIp)) {
            // 证明是第一次注册 - 更新createIp
            createIp = ip;
        }
        // 更新updateIp
        updateIp = ip;
    }

    /**
     * 是否需要刷新ip
     * null为不需要更新
     */
    public String needRefreshIp() {
        boolean notNeedRefresh = Optional.ofNullable(updateIpDetail)
                .map(IpDetail::getIp)
                .filter(ip -> Objects.equals(ip, updateIp))
                .isPresent();
        return notNeedRefresh ? null : updateIp;
    }

    public void refreshIpDetail(IpDetail ipDetail) {
        // ipDetail是新ip的解析信息 - 可能会有数据变化，因此createIp也需要判断一下，进行修改detail信息
        if (Objects.equals(createIp, ipDetail.getIp())) {
            createIpDetail = ipDetail;
        }
        if (Objects.equals(updateIp, ipDetail.getIp())) {
            updateIpDetail = ipDetail;
        }
    }
}
